package com.wande.dataplatform.service;

import com.wande.common.mybatis.core.page.PageQuery;
import com.wande.common.mybatis.core.page.TableDataInfo;
import com.wande.dataplatform.domain.DsSyncConfig;
import com.wande.dataplatform.domain.DsSyncLog;
import com.wande.dataplatform.domain.DsTaskMapping;
import com.wande.dataplatform.domain.dto.DsSyncConfigDTO;
import com.wande.dataplatform.domain.vo.DsTaskMappingVO;

import java.util.List;

/**
 * DolphinScheduler同步服务接口
 *
 * @author DataPlatform
 */
public interface IDolphinSchedulerSyncService {

    /**
     * 创建同步配置
     *
     * @param dto 同步配置DTO
     * @return 配置ID
     */
    Long createSyncConfig(DsSyncConfigDTO dto);

    /**
     * 更新同步配置
     *
     * @param dto 同步配置DTO
     * @return 是否成功
     */
    Boolean updateSyncConfig(DsSyncConfigDTO dto);

    /**
     * 删除同步配置
     *
     * @param id 配置ID
     * @return 是否成功
     */
    Boolean deleteSyncConfig(Long id);

    /**
     * 查询同步配置列表
     *
     * @param pageQuery 分页查询
     * @return 配置列表
     */
    TableDataInfo<DsSyncConfig> querySyncConfigList(PageQuery pageQuery);

    /**
     * 手动触发同步
     *
     * @param configId 配置ID
     * @return 是否成功
     */
    Boolean triggerSync(Long configId);

    /**
     * 创建ETL任务到DolphinScheduler工作流的映射
     *
     * @param etlTaskId ETL任务ID
     * @return 映射ID
     */
    Long createEtlTaskMapping(Long etlTaskId);

    /**
     * 同步工作流状态
     *
     * @param workflowCode 工作流编码
     * @return 是否成功
     */
    Boolean syncWorkflowStatus(Long workflowCode);

    /**
     * 同步任务实例状态
     *
     * @param instanceId 实例ID
     * @return 是否成功
     */
    Boolean syncInstanceStatus(Long instanceId);

    /**
     * 查询任务映射关系
     *
     * @param platformTaskId 平台任务ID
     * @param platformTaskType 平台任务类型
     * @return 映射关系
     */
    DsTaskMapping queryTaskMapping(Long platformTaskId, String platformTaskType);

    /**
     * 查询任务映射列表
     *
     * @param pageQuery 分页查询
     * @return 映射列表
     */
    TableDataInfo<DsTaskMappingVO> queryTaskMappingList(PageQuery pageQuery);

    /**
     * 查询同步日志
     *
     * @param configId 配置ID
     * @param pageQuery 分页查询
     * @return 日志列表
     */
    TableDataInfo<DsSyncLog> querySyncLogs(Long configId, PageQuery pageQuery);

    /**
     * 构建数据血缘关系
     *
     * @param taskId 任务ID
     * @return 是否成功
     */
    Boolean buildDataLineage(Long taskId);

    /**
     * 定时同步任务（由调度器调用）
     */
    void scheduledSync();
}
